/*
 * Utiles_Importar.java
 *
 * Created on 22 de enero de 2008, 10:52
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package com.eps.util;
import java.util.*;
import jxl.*;
import java.io.*;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
/**
 *
 * @author EPS
 */
public class Utiles_Importar {
    
    /** Creates a new instance of Utiles_Importar */
    //Constructor 1
    public Utiles_Importar( File f, int hoja, int ncols, int nfilas ) {
        this.arch = f;        
        this.hoja = hoja;
        this.ncols = ncols;
        this.nfilas = nfilas;
    }             
    
    //Constructor 2
    public Utiles_Importar( File f ){
        this.arch = f;
        this.ncols = -1;    //Damos valores predeterminados
        this.nfilas = -1;
    }
    
    //Este m�todo se utiliza con el constructor 1
    public ArrayList getDatos(){
        ArrayList arrTemp = null;
        ArrayList filaTemp = null;
        
        arrTemp = new ArrayList( 1 );
        Workbook wb = null;
        Sheet sh = null;
        Cell cel = null;
        
        try{
            wb = Workbook.getWorkbook( arch );            
        }catch( Exception er ){
            er.printStackTrace();
        }
        
        sh = wb.getSheet( this.hoja );
                
        for( int i = 1; i < nfilas; i++ ){
            filaTemp = new ArrayList( 1 );
            for( int j = 0; j < ncols; j++ ){
                cel = sh.getCell( j, i );                
                filaTemp.add( cel.getContents() );
            }
            arrTemp.add( filaTemp );            
        }
        
        identificadores = new ArrayList( 1 );
        clases = new ArrayList( 1 );
        
        for( int i = 0; i < ncols; i++ ){
            cel = sh.getCell( i, 0 );
            identificadores.add( cel.getContents() );
            try{
                clases.add( Class.forName( "java.lang.String" ) );
            }catch( Exception er ){
                //er.printStackTrace();
            }
        }                
        return arrTemp;        
    }   
    
    
    //Este m�todo se utiliza con el constructor 2
    public ArrayList getDatosHoja( int sheet ){
        ArrayList arrTemp = null;
        ArrayList filaTemp = null;
        
        
        arrTemp = new ArrayList( 1 );
        Workbook wb = null;
        Sheet sh = null;
        Cell cel = null;
        
        try{
            wb = Workbook.getWorkbook( arch );            
        }catch( Exception er ){
            er.printStackTrace();
           
        }        
        sh = wb.getSheet( sheet );

        
        if( this.nfilas == -1 ){    //Cuando no haya ingresado la cantidad de filas
            this.nfilas = sh.getRows(); //Obtengo n�mero de filas
        }
        
        if( this.ncols == -1 ){     //Cuando no haya ingresado la cantidad de columnas            
            this.ncols = sh.getColumns(); //Obtengo n�mero de columnas
        }
        /*this.ncols = 9;
        this.nfilas = 107;*/
                       
        for( int i = 1; i < nfilas; i++ ){
            filaTemp = new ArrayList( 1 );
            for( int j = 0; j < ncols; j++ ){
                cel = sh.getCell( j, i );                
                filaTemp.add( cel.getContents() );
            }
            arrTemp.add( filaTemp );            
        }
                
        //Estableciendo las clases( Por defecto las he puesto como String ) y los valores de las cabeceras
        identificadores = new ArrayList( 1 );
        clases = new ArrayList( 1 );        
        
        for( int i = 0; i < ncols; i++ ){
            cel = sh.getCell( i, 0 );
            identificadores.add( cel.getContents() );
            try{
            clases.add( Class.forName( "java.lang.String" ) );
            }catch( Exception er ){
                //er.printStackTrace();
            }
        }        
        return arrTemp;
    }

    public ArrayList getDatosHojaCobranza( int sheet ){
        ArrayList arrTemp = null;
        ArrayList filaTemp = null;
        

        arrTemp = new ArrayList( 1 );
        Workbook wb = null;
        Sheet sh = null;
        Cell cel = null;

        try{
            wb = Workbook.getWorkbook( arch );
        }catch( Exception er ){
            er.printStackTrace();
            
        }
        sh = wb.getSheet( sheet );


        if( this.nfilas == -1 ){    //Cuando no haya ingresado la cantidad de filas
            this.nfilas = sh.getRows(); //Obtengo n�mero de filas
        }

        if( this.ncols == -1 ){     //Cuando no haya ingresado la cantidad de columnas
            this.ncols = sh.getColumns(); //Obtengo n�mero de columnas
        }
        /*this.ncols = 9;
        this.nfilas = 107;*/

        for( int i = 1; i < nfilas; i++ ){
            filaTemp = new ArrayList( 1 );
            for( int j = 0; j < ncols; j++ ){
                cel = sh.getCell( j, i );
                filaTemp.add( cel.getContents() );
            }
            arrTemp.add( filaTemp );
        }

        //Estableciendo las clases( Por defecto las he puesto como String ) y los valores de las cabeceras
        identificadores = new ArrayList( 1 );
        clases = new ArrayList( 1 );

        for( int i = 0; i < ncols; i++ ){
            cel = sh.getCell( i, 0 );
            identificadores.add( cel.getContents() );
            try{
            switch(i){
                case 0:clases.add( Class.forName( "java.lang.String" ) );break;
                case 1:clases.add( Class.forName( "java.lang.String" ) );break;
                case 2:clases.add( Class.forName( "java.lang.String" ) );break;
                default:clases.add( Class.forName( "java.math.BigDecimal" ) );break;
            }   
           
            }catch( Exception er ){
                er.printStackTrace();
            }
        }
        return arrTemp;
    }

    public ArrayList getDatosHojasExtracto(int sheet,int fila_ini, int columna_ini, String campos_cadena){
        ArrayList arrTemp = null;
        ArrayList filaTemp = null;
        arrTemp = new ArrayList( 1 );
        Workbook wb = null;
        Sheet sh = null;
        Cell cel = null;

        try{
            wb = Workbook.getWorkbook( arch );
        }catch( Exception er ){
            er.printStackTrace();
            
        }
        sh = wb.getSheet( sheet );


        if( this.nfilas == -1 ){    //Cuando no haya ingresado la cantidad de filas
            this.nfilas = sh.getRows(); //Obtengo n�mero de filas
        }

        if( this.ncols == -1 ){     //Cuando no haya ingresado la cantidad de columnas
            this.ncols = sh.getColumns(); //Obtengo n�mero de columnas
        }
        /*this.ncols = 9;
        this.nfilas = 107;*/
        try{
            int contador=0;
            String[] campos = campos_cadena.split(",");
             for( int i = fila_ini; i < nfilas; i++ ){
                filaTemp = new ArrayList( 1 );
                filaTemp.add( ""+(contador+1));
                for (String campo : campos) {
                    cel = sh.getCell( Integer.parseInt(campo), i );
                    filaTemp.add( cel.getContents() );
                }
           
                 arrTemp.add( filaTemp );
                contador++;
 

        }
        this.nfilas=this.nfilas-contador;
        //Estableciendo las clases( Por defecto las he puesto como String ) y los valores de las cabeceras
      
        }catch( Exception er ){
            er.printStackTrace();
        }

        return arrTemp;
    }

     public ArrayList getDatosHojaPosicion2( int sheet ){
        ArrayList arrTemp = null;
        ArrayList filaTemp = null;


        arrTemp = new ArrayList( 1 );
        Workbook wb = null;
        Sheet sh = null;
        Cell cel = null;

        try{
            wb = Workbook.getWorkbook( arch );
        }catch( Exception er ){
            er.printStackTrace();
           
        }
        sh = wb.getSheet( sheet );


        if( this.nfilas == -1 ){    //Cuando no haya ingresado la cantidad de filas
            this.nfilas = sh.getRows(); //Obtengo n�mero de filas
        }

        if( this.ncols == -1 ){     //Cuando no haya ingresado la cantidad de columnas
            this.ncols = sh.getColumns(); //Obtengo n�mero de columnas
        }
        /*this.ncols = 9;
        this.nfilas = 107;*/

        try{
            int contador=0;
        for( int i = 5; i < nfilas; i++ ){
            filaTemp = new ArrayList( 1 );
                    filaTemp.add( ""+(contador+1));
                    cel = sh.getCell( 0, i );
                    filaTemp.add( cel.getContents() );
                    cel = sh.getCell( 2, i );
                    filaTemp.add( cel.getContents() );
                    cel = sh.getCell( 6, i );
                    filaTemp.add( cel.getContents() );
                    cel = sh.getCell( 10, i );
                    filaTemp.add( cel.getContents() );
                    cel = sh.getCell( 3, i );;
                    //NumberFormat formatter = new DecimalFormat("#,##0.00");
                    //String numero = formatter.format(cel.getContents());
                    String numero =cel.getContents();
                    if(numero.indexOf(",") > numero.indexOf(".")){
                        numero =  numero.replace(",", "/");
                        numero =  numero.replace(".", "%");

                        numero =  numero.replace("/", ".");
                        numero =  numero.replace("%", ",");

                    }
                    BigDecimal monto = new BigDecimal(numero);
                    monto = monto.setScale(2);
                    if(monto.compareTo(BigDecimal.ZERO)<0){
                        filaTemp.add( "" );
                        filaTemp.add( monto.abs() );
                    }
                    else{
                        filaTemp.add( monto );
                        filaTemp.add( "" );
                    }

                    cel = sh.getCell( 4, i );
                     numero =cel.getContents();
                    if(numero.indexOf(",") > numero.indexOf(".")){
                        numero =  numero.replace(",", "/");
                        numero =  numero.replace(".", "%");

                        numero =  numero.replace("/", ".");
                        numero =  numero.replace("%", ",");

                    }

                    filaTemp.add( numero );
           // if(sh.getCell( 1, i ).getContents().toString().compareTo("")!=0){
                 arrTemp.add( filaTemp );
           // }
          //  else{
                contador++;
               // }
                 
        }
        
        this.nfilas=this.nfilas-contador;
       

        //Estableciendo las clases( Por defecto las he puesto como String ) y los valores de las cabeceras
        identificadores = new ArrayList( 1 );
        clases = new ArrayList( 1 );
        identificadores.add("CORR");
        identificadores.add("FECHA");
        identificadores.add("CONCEPTO");
        identificadores.add("OPERACION");
        identificadores.add("REFERENCIA");
        identificadores.add("CARGO");
        identificadores.add("ABONO");
        identificadores.add("SALDO");
       
                clases.add( Class.forName( "java.lang.String" ) );
                clases.add( Class.forName( "java.lang.String" ) );
                clases.add( Class.forName( "java.lang.String" ) );
                clases.add( Class.forName( "java.lang.String" ) );
                clases.add( Class.forName( "java.lang.String" ) );
                clases.add( Class.forName( "java.math.BigDecimal" ) );
                clases.add( Class.forName( "java.math.BigDecimal" ) );
                clases.add( Class.forName( "java.math.BigDecimal" ) );
            }catch( Exception er ){
                er.printStackTrace();
            }

        return arrTemp;
    }

      public ArrayList getDatosHojaPosicion( int sheet ){
        ArrayList arrTemp = null;
        ArrayList filaTemp = null;


        arrTemp = new ArrayList( 1 );
        Workbook wb = null;
        Sheet sh = null;
        Cell cel = null;

        try{
            wb = Workbook.getWorkbook( arch );
        }catch( Exception er ){
            er.printStackTrace();
           
        }
        sh = wb.getSheet( sheet );


        if( this.nfilas == -1 ){    //Cuando no haya ingresado la cantidad de filas
            this.nfilas = sh.getRows()-3; //Obtengo n�mero de filas
        }

        if( this.ncols == -1 ){     //Cuando no haya ingresado la cantidad de columnas
            this.ncols = sh.getColumns(); //Obtengo n�mero de columnas
        }
        /*this.ncols = 9;
        this.nfilas = 107;*/
        int contador=0;
        for( int i = 5; i < nfilas; i++ ){
            filaTemp = new ArrayList( 1 );
                    cel = sh.getCell( 1, i );
                    filaTemp.add( cel.getContents() );
                    cel = sh.getCell( 2, i );
                    filaTemp.add( cel.getContents() );
                    cel = sh.getCell( 6, i );
                    filaTemp.add( cel.getContents() );
                    cel = sh.getCell( 7, i );
                    filaTemp.add( cel.getContents() );
            if(sh.getCell( 1, i ).getContents().toString().compareTo("")!=0){
                 arrTemp.add( filaTemp );
            }
            else{
                contador++;
                }
        }
        this.nfilas=this.nfilas-contador;

        //Estableciendo las clases( Por defecto las he puesto como String ) y los valores de las cabeceras
        identificadores = new ArrayList( 1 );
        clases = new ArrayList( 1 );
        identificadores.add("SNIP");
        identificadores.add("PROYECTO");
        identificadores.add("MONTO TOTAL");
        identificadores.add("CODIGO WEB");
       try{
                clases.add( Class.forName( "java.lang.String" ) );
                clases.add( Class.forName( "java.lang.String" ) );
                clases.add( Class.forName( "java.lang.String" ) );
                 clases.add( Class.forName( "java.lang.String" ) );
            }catch( Exception er ){
                //er.printStackTrace();
            }
       
        return arrTemp;
    }
    public ArrayList getIdentificadores(){
        return this.identificadores;
    }
    
    public ArrayList getClases(){
        return this.clases;
    }
    
    public ArrayList getDatosInfo(){
        return this.datos;
    }    
    
    public int getHoja() {
        return hoja;
    }
    
    public void setNumFilas( int fil ){
        this.nfilas = fil;
    }
    
    public int getNumFilas(  ){
        return this.nfilas ;
    }
    
    public void setNumColumnas( int col ){
        this.ncols = col;
    }
    
    public void setNumHoja( int hoja ){
        this.hoja = hoja;
    }
     
    
    public static void main( String[] args ){        
    }
    
    private File arch;    
    private int hoja;
    private int ncols;
    private int nfilas;
    
    private ArrayList identificadores;
    private ArrayList clases;
    private ArrayList datos;   
    
}
